import pandas as pd
import numpy as np
import warnings
import matplotlib.pyplot as plt
# 设置 中 文 显 示 字 体
plt.rcParams['font.sans-serif']=['SimHei'] # 用 来 正 常 显 示 中 文 标 签
plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号
warnings.filterwarnings("ignore") #清除警告日志



# 模拟生成数据
np.random.seed(42)
n = 12  # 模拟 12 个月的数据
report_dates = pd.date_range(start='2025-01-01', periods=n, freq='M')

# 原/分保费收入
base_original_premium = 1000000
original_premium_growth_rate = np.random.uniform(0.01, 0.1, n)
original_premium = base_original_premium * (1 + original_premium_growth_rate).cumprod()

# 基期原/分保费收入
base_original_premium_base = np.roll(original_premium, 1)
base_original_premium_base[0] = base_original_premium

# 分出保费
ceded_premium = np.random.uniform(0.1, 0.3, n) * original_premium

# 自留保费
retained_premium = original_premium - ceded_premium

# 基期自留保费
base_retained_premium = np.roll(retained_premium, 1)
base_retained_premium[0] = retained_premium[0]

# 首年原/分保费收入
first_year_premium = np.random.uniform(0.2, 0.5, n) * original_premium

# 长期人身险有效保单数量
initial_policies = 1000
policy_growth_rate = np.random.uniform(-0.05, 0.1, n)
policy_count = initial_policies * (1 + policy_growth_rate).cumprod()

# 个人营销渠道首年原保费收入
personal_channel_premium = np.random.uniform(0.1, 0.3, n) * original_premium

# 个人营销渠道新单件数
personal_channel_new_policies = np.random.randint(100, 500, n)

# 标准保费
standard_premium_coefficient = np.random.uniform(0.8, 1.2, n)
standard_premium = first_year_premium * standard_premium_coefficient

# 基期标准保费
base_standard_premium = np.roll(standard_premium, 1)
base_standard_premium[0] = standard_premium[0]

# 期初和期末营销员数量
initial_agents = 50
agent_growth_rate = np.random.uniform(-0.05, 0.1, n)
agent_count = initial_agents * (1 + agent_growth_rate).cumprod()
end_agent_count = np.roll(agent_count, -1)
end_agent_count[-1] = agent_count[-1]

# 期初和期末所有者权益
initial_equity = 5000000
equity_growth_rate = np.random.uniform(0.01, 0.05, n)
equity = initial_equity * (1 + equity_growth_rate).cumprod()
end_equity = np.roll(equity, -1)
end_equity[-1] = equity[-1]

# 创建 DataFrame
data = {
    '报告日期': report_dates,
    '原/分保费收入': original_premium,
    '基期原/分保费收入': base_original_premium_base,
    '分出保费': ceded_premium,
    '自留保费': retained_premium,
    '基期自留保费': base_retained_premium,
    '首年原/分保费收入': first_year_premium,
    '第 1 个月末长期人身险有效保单数量': np.roll(policy_count, 12),
    '第 13 个月末长期人身险有效保单数量': policy_count,
    '个人营销渠道首年原保费收入': personal_channel_premium,
    '个人营销渠道新单件数': personal_channel_new_policies,
    '标准保费': standard_premium,
    '基期标准保费': base_standard_premium,
    '期初营销员数量': agent_count,
    '期末营销员数量': end_agent_count,
    '期初所有者权益': equity,
    '期末所有者权益': end_equity
}

df = pd.DataFrame(data)

# 计算各项指标
# 原/分保费收入增长率
df['原/分保费收入增长率'] = ((df['原/分保费收入'] - df['基期原/分保费收入']) / df['基期原/分保费收入']) * 100

# 自留保费增长率
df['自留保费增长率'] = ((df['自留保费'] - df['基期自留保费']) / df['基期自留保费']) * 100

# 首年保费与保费收入比
df['首年保费与保费收入比'] = (df['首年原/分保费收入'] / df['原/分保费收入']) * 100

# 13 个月续保率
df['13 个月续保率'] = (df['第 13 个月末长期人身险有效保单数量'] / df['第 1 个月末长期人身险有效保单数量']) * 100

# 个人营销渠道的件均保费
df['个人营销渠道的件均保费'] = df['个人营销渠道首年原保费收入'] / df['个人营销渠道新单件数']

# 标准保费增长率
df['标准保费增长率'] = ((df['标准保费'] - df['基期标准保费']) / df['基期标准保费']) * 100

# 人均保费
df['人均保费'] = df['标准保费'] / ((df['期初营销员数量'] + df['期末营销员数量']) / 2)

# 自留保费占净资产比
df['自留保费占净资产比'] = (df['自留保费'] / ((df['期初所有者权益'] + df['期末所有者权益']) / 2)) * 100

# 可视化部分指标
plt.figure(figsize=(12, 8))

plt.subplot(2, 2, 1)
plt.plot(df['报告日期'], df['原/分保费收入增长率'], label='原/分保费收入增长率')
plt.title('原/分保费收入增长率')
plt.xlabel('报告日期')
plt.ylabel('增长率 (%)')
plt.legend()

plt.subplot(2, 2, 2)
plt.plot(df['报告日期'], df['自留保费增长率'], label='自留保费增长率')
plt.title('自留保费增长率')
plt.xlabel('报告日期')
plt.ylabel('增长率 (%)')
plt.legend()

plt.subplot(2, 2, 3)
plt.plot(df['报告日期'], df['13 个月续保率'], label='13 个月续保率')
plt.title('13 个月续保率')
plt.xlabel('报告日期')
plt.ylabel('续保率 (%)')
plt.legend()

plt.subplot(2, 2, 4)
plt.plot(df['报告日期'], df['人均保费'], label='人均保费')
plt.title('人均保费')
plt.xlabel('报告日期')
plt.ylabel('保费金额')
plt.legend()

plt.tight_layout()
plt.show()

print(df[['报告日期', '原/分保费收入增长率', '自留保费增长率', '首年保费与保费收入比', '13 个月续保率', '个人营销渠道的件均保费', '标准保费增长率', '人均保费', '自留保费占净资产比']])